///aktazo_main.cpp
///main c++ file for aktazo project

#include <iostream>
#include <sstream>
///sstream is for the help and about messages

#include "aktazo.h"
#include "aktazo_exceptions.h"
#include "date_exceptions.h"
#include "file_io_exceptions.h"
#include "document_exceptions.h"
#include "menu_exceptions.h"

int main(int argc, char *argv[])
{
	std::cout<<"Az Aktazo udvozli Ont."<<std::endl;
	///to see that program is started
	
	const std::string program_actual_name=argv[0];

	std::ostringstream help_message;
	std::ostringstream about_message;
	///about is appended to help message

	help_message<<"SUGO"<<std::endl<<
		"   Az Aktazoval iratok legfontosabb adatait tudja rogziteni, a mar rogzitett iratok adataira ra tud keresni, az adatokat el tudja menteni, es kesobb be tudja olvasni."<<std::endl<<
		"   Az Aktazo funkcioit egy menubol tudja elerni: valaszthatja, hogy iratot rogzit (hatosagtol erkezo hatarozatot, partnertol erkezo szamlat, ugyfeltol erkezo panaszos vagy - leendo - partnertol erkezo ajanlatkero levelet), vagy hogy a rogzitett iratok kozott iktatoszam, ugyszam vagy partner alapjan keres."<<std::endl<<
		"   A menupontok kivalasztasa a menupontnak megfelelo betu leutese utan Enterrel tortenik."<<std::endl<<
		"   Irat rogzitesekor az irat tipusat a menubol kell kivalasztania. Ezutan meg kell adnia az ugyszamot, a keltezest, a targyat, a partner megnevezeset es szamlak eseteben a szamla vegosszeget is. Donthet ugy is, hogy barmelyik irathoz iktatoszamot is rogzit, de ez nem kotelezo. Az iktatoszam, az ugyszam es a szamla vegosszegenek tipusakent egesz szamot adjon meg (a felvezeto 0-kat az Aktazo nem veszi figyelembe). Ha iktatoszamot nem kivan rogziteni, ugy 0-t adjon meg iktatoszamnak. A targy es a partner megadasakor tetszoleges (kis- es nagybetuket, ekezetes betuket, szokozt, idezojelet, szamokat es irasjeleket is tartalmazo) szoveget megadhat. A datum reszeit EEEE, HH illetve NN formatumban kell bevinnie, de a honapok es a napok elol a felvezeto 0-kat el is hagyhatja."<<std::endl<<
		"   Irat lekerdezesekor valassza ki a kivant lekerdezesi muveletet, majd adja meg, hogy milyen erteket keres. Iktatoszam es ugyszam eseten egesz szamot adjon meg (a felvezeto 0-kat az Aktazo nem veszi figyelembe). Ha azokat az iratokat keresi, melyekhez nem rogzitett iktatoszamot, a lekerdezeskor iktatoszamnak 0-t adjon meg. Partnerre torteno keresesnel az Aktazo a kis- es nagybetut megkulonbozteti, minden karaktert figyelembe vesz (tehat nem hasznalhatoak az altalanosan bevett *, ?, _, % stb. helyettesito karakterek, kivetel: az egyetlen darab * karakter, mely az osszes partnerre illeszkedik), es szovegreszletben keres egyezest. Tehat ha pl. 'Ma'-ra keres, akkor ez illeszkedik a 'Magyar Allami Operahaz', a 'Lengyel-Magyar Barati Tarsasag' es a 'Malev Zrt.' partnerekre, de nem illeszkedik a 'MALEV GmbH.', a 'KATA-MARAN S.A.', a 'Fizikai-matematikai intezet', az 'Arm-ma Consulting Ltd.' vagy az 'Elm archytekt Sp. z o.o.' partnerekre."<<std::endl<<
		"   Bizonyos esetekben fontos lehet tudnia, hogy az Aktazo az adatokat egy egyszeru szovegfajlban, az adatok.dat fajlban tarolja, mely ugyanabban a konyvtarban talalhato meg, mint az Aktazo program. Az adatfajl karakterkodolasa megegyezik a futtato parancssor karakterkodolasaval: magyar nyelvu 32 bites Windows XP Professional SP3 alatt ez OEM 852, a caesar.elte.hu gepen Debian GNU/Linux alatt pedig UTF-8."<<std::endl<<
		"   Utmutatot az Aktazo elso hasznalatba vetelehez, peldakat es egyeb hasznos informaciokat az Aktazo honlapjan talal."<<std::endl<<
		"   A reszletes felhasznaloi dokumentaciot attekinthetobb formaban az Aktazo honlapjan, a"<<std::endl<<
		"   http://code.google.com/p/aktazo/wiki/FelhasznaloiDokumentacio weboldalon talapja meg."<<std::endl;

	about_message<<"NEVJEGY"<<std::endl<<
		"   Aktazo alkalmazas"<<std::endl<<
		"   Beadando az IP-08abtSZT targybol."<<std::endl<<
		"   Iratok (szamlak, hatarozatok stb.) iktatasara szolgalo alkalmazas."<<std::endl<<
		"Verzio: "<<std::endl<<
		"   1.0"<<std::endl<<
		"   build: "<<__DATE__<<", "<<__TIME__<<std::endl<<
		"Program futtatasa:"<<std::endl<<
		"   aktazo"<<std::endl<<
		"Az Aktazo jelenleg a kovetkezo hivassal fut:"<<std::endl<<
		"   '"<<program_actual_name<<"'."<<std::endl<<
		"Sugo:"<<std::endl<<
		"   aktazo help"<<std::endl<<
		"Nevjegy:"<<std::endl<<
		"   aktazo about us"<<std::endl<<
		"Licenc:"<<std::endl<<
		"   GNU GPL v2, http://www.gnu.org/licenses/old-licenses/gpl-2.0.html"<<std::endl<<
		"Honlap:"<<std::endl<<
		"   http://code.google.com/p/aktazo/"<<std::endl;

	if(1==argc)
	{
		///exactly zero program parameter probably means './aktazo'
		///running the main program
		try
		{
			Aktazo aktazo;
		}
		catch(Date_exceptions e)
		{
			std::cerr<<std::endl<<e.what()<<std::endl;
		}
		catch(Document_exceptions e)
		{
			std::cerr<<std::endl<<e.what()<<std::endl;
		}
		catch(File_IO_exceptions e)
		{
			std::cerr<<std::endl<<e.what()<<std::endl;
		}
		catch(Menu_exceptions e)
		{
			std::cerr<<std::endl<<e.what()<<std::endl;
		}
		catch(Aktazo_exceptions e)
		{
			std::cerr<<std::endl<<e.what()<<std::endl;
		}
		catch(...)
		{
			std::cerr<<std::endl<<"Sajnalatos, de kezeletlen, egyben nagyon ismeretlen kivetel tortent. Jobban sajnaljuk, mint gondolna. Vegtelenul. Es meg annal is jobban. :P"<<std::endl;
		}
	}
	else if(2==argc)
	{
		///exactly one program parameter means './aktazo param1'
		///probably: './aktazo help'
		std::cout<<about_message.str();
		std::cout<<help_message.str();
	}
	else
	{
		///at least two program parameters mean './aktazo param1 param2 ...'
		///probably: './aktazo about us'
		std::cout<<about_message.str();
	}

	std::cout<<"Az Aktazo most kilep."<<std::endl;
	///user can see that program is finished normally
	return(0);
}
